package com.linghang.wusthelpercompetition.controller;

import com.github.houbb.sensitive.word.core.SensitiveWordHelper;
import com.linghang.wusthelpercompetition.dto.ResponseDTO;
import com.linghang.wusthelpercompetition.dto.ResponsePageDTO;
import com.linghang.wusthelpercompetition.dto.ResponseUpdateDTO;
import com.linghang.wusthelpercompetition.entity.ResponsePost;
import com.linghang.wusthelpercompetition.mapper.ResponsePostMapper;
import com.linghang.wusthelpercompetition.result.Result;
import com.linghang.wusthelpercompetition.service.ResponsePostService;
import com.linghang.wusthelpercompetition.service.impl.ResponsePostServiceImpl;
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.apache.coyote.Response;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import static com.linghang.wusthelpercompetition.utils.GetIdentityService.getUidFromSecurityContext;

@Slf4j
@RestController
@RequestMapping("/responsePost")
public class ResponsePostController{
    @Autowired
    private ResponsePostServiceImpl responsePostService;
    @Autowired
    private ResponsePostMapper responsePostMapper;

    /**
     * 新增回复信息
     * @param responseDTO
     * @return
     */
    @PostMapping
    @Operation(summary = "新建一个回复信息")
    public Result addResponse(@RequestBody ResponseDTO responseDTO){

        String response = responseDTO.getResponse();
        if(SensitiveWordHelper.contains(response)){
            return Result.error("内容包含敏感词!");
        }
        //TODO 如果需要检验联系方式可再次操作

        String studentId = getUidFromSecurityContext();
        responseDTO.setStudentId(studentId);
        //查询同一个帖子下同一个学号是否之前回复过信息
        ResponsePost responsePost = responsePostMapper.getResponsePostByCidAndStudentId(responseDTO.getCid() , studentId);
        if(responsePost != null){
            return Result.error("您已回复过该帖子");
        }
        Long total = responsePostService.getTotalByStudentId(studentId);
        if(total >= 10){
            return Result.error("最多只能同时回复10条信息,请先删除");
        }

        log.info("新增回复信息：{}",responseDTO);
        responsePostService.addResponse(responseDTO);
        return Result.success();
    }

    /**
     * 删除回复信息
     * @param rid
     * @return
     */
    @DeleteMapping("/{rid}")
    @Operation(summary = "删除一个回复信息")
    public Result deleteResponse(@PathVariable("rid") Long rid){
        log.info("删除回复信息，id为：{}",rid);
        //判断是不是自己的回复信息，仅自己的回复信息可以删除
        String studentId = getUidFromSecurityContext();
        ResponsePost responsePost = responsePostMapper.selectById(rid);
        if(!studentId.equals(responsePost.getStudentId())){
            return Result.error("权限不够，无法删除别人的回复信息");
        }

        responsePostService.deleteResponse(rid);
        return Result.success();
    }

//    /**
//     * 根据rid查询回复信息
//     * @param rid
//     * @return
//     */
//    @GetMapping("/rid/{rid}")
//    @Operation(summary = "根据rid查询回复信息")
//    public Result getResponseById(@PathVariable("rid") Long rid){
//        log.info("根据rid查询回复信息，rid为：{}",rid);
//        return Result.success(responsePostService.getResponseById(rid));
//    }

//    /**
//     * 根据学号studentId查询回复信息
//     * @param studentId
//     * @return List<ResponsePost>
//     */
//    @GetMapping("/my-response/{studentId}")
//    public Result listMyResponses(@PathVariable("studentId") String studentId){
//        log.info("根据学号studentId查询回复信息，学号studentId为：{}",studentId);
//        return Result.success(responsePostService.listMyResponses(studentId));
//    }

//    /**
//     * 根据帖子id查询回复信息
//     * @param cid
//     * @return List<ResponsePost>
//     */
//    @GetMapping("/by-post/{cid}")
//    public Result listResponsesByPost(@PathVariable("cid") Long cid){
//        log.info("根据帖子id查询回复信息，帖子id为：{}",cid);
//        return Result.success(responsePostService.listResponsesByPost(cid));
//    }

    /**
     * 分页查询回复信息(根据帖子cid 或者根据 学号studentId查询)
     * cid和studentId不能同时存在
     * @param responsePageDTO
     * @return PageResult
     */
    @PostMapping("/getPage")
    @Operation(summary = "分页查询回复信息，studentId不用传，如果传了cid，则是查询这个帖子的所有回复信息，如果没传cid，则是查询这个人的所有回复信息")
    public Result pageByCid(@RequestBody ResponsePageDTO responsePageDTO){
        String studentId = getUidFromSecurityContext();
        responsePageDTO.setStudentId(studentId);
        //cid和studentId不能同时存在
//        if(responsePageDTO.getCid()!=null&&responsePageDTO.getStudentId()!=null)
//            return Result.error("分页查询失败,参数错误");


        log.info("分页查询回复信息，参数为：{}",responsePageDTO);
        return Result.success(responsePostService.pageByCidOrStudentId(responsePageDTO));
    }
//    /**
//     * 更新回复信息
//     * @param responseUpdateDTO
//     * @return
//     */
//    @PutMapping("/response")
//    @Operation(summary = "更新回复信息")
//    public Result updateResponse(@RequestBody ResponseUpdateDTO responseUpdateDTO){
//        //判断是否自己的回复信息
//        String studentId = getUidFromSecurityContext();
//        ResponsePost responsePost = responsePostMapper.selectById(responseUpdateDTO.getRid());
//        if(!studentId.equals(responsePost.getStudentId())){
//            return Result.error("权限不够，无法修改别人的回复信息");
//        }
//
//        String response = responseUpdateDTO.getResponse();
//        if(response == null || response.equals("")){
//            return Result.error("回复内容不能为空");
//        }
//        if(SensitiveWordHelper.contains(response)){
//            return Result.error("内容包含敏感词!");
//        }
//        log.info("更新回复信息：{}",responseUpdateDTO);
//        responsePostService.updateResponse(responseUpdateDTO);
//        return Result.success();
//    }

    /**
     * 处理回复信息——即设为已结（更新status状态）
     * @param rid
     * @return
     */
//    @PutMapping("/handle/{rid}")
//    @Operation(summary = "处理回复信息(将回复信息设为已结，即修改status)")
//    public Result handleResponse(@PathVariable("rid") Long rid){
//        responsePostService.handleResponse(rid);
//        return Result.success();
//    }

//    /**
//     *
//     * @param rid
//     * @return
//     */
//    @GetMapping("/getCidByRid/{rid}")
//    @Operation(summary = "根据回复rid查询帖子cid，根据回复信息确定帖子位置")
//    public Result<Long> getCidByRid(@PathVariable("rid") Long rid){
//        return Result.success(responsePostService.getCidByRid(rid));
//    }

//    /**
//     * 获取该帖子下的个人的回复信息
//     * @param cid
//     * @return
//     */
//    @GetMapping("/getByCidAndStudentId/{cid}")
//    @Operation(summary = "根据cid和studentId查询回复信息，外人看帖子下面只能查看自己的回复信息")
//    public Result getByCidAndStudentId(@PathVariable("cid") Long cid){
//
//        String studentId = getUidFromSecurityContext();
//
//        return Result.success(responsePostService.getByCidAndStudentId(cid , studentId));
//    }



}
